/**
 * FenetreMere.java
 */

package vue;

import java.util.HashMap;
import modele.*;
import controleur.*;

/**
 *
 * @author sylvainc
 */
public class FenetreMere extends javax.swing.JFrame {

    // Références principales
    private Controleur controleur;
    private Ressources ressources;

    // Les écrans
    private EcranAccueil ecranAccueil;
    private EcranModele ecranModele;
    private EcranFond ecranFond;
    private EcranImport ecranImport;
    private EcranPosition ecranPosition;
    private EcranRetouche ecranRetouche;
    private EcranTexte ecranTexte;
    private EcranImpression ecranImpression;

    // Identifiants des écrans
    private String[] idEcrans = {
        "accueil", "modele", "fond", "import",
        "position", "retouche", "texte", "impression"
    };

    // Hashmap pour stockage des couples id/ecran
    private HashMap ecrans;


    /**
     * Constructeur de la class FenetreMere
     * @param controleur Pour la référence vers le controleur
     * @param ressources Pour la référence vers les ressources
     */
    public FenetreMere(Controleur controleur, Ressources ressources) {
        initComponents();
        setResizable(true);

        this.controleur = controleur;
        this.ressources = ressources;
      
        ecranAccueil = null;
        ecranModele = null;
        ecranFond = null;
        ecranImport = null;
        ecranPosition = null;
        ecranRetouche = null;
        ecranTexte = null;
        ecranImpression = null;

        ecrans = new HashMap();
        ecrans.put("accueil", ecranAccueil);
        ecrans.put("modele", ecranModele);
        ecrans.put("fond", ecranFond);
        ecrans.put("import", ecranImport);
        ecrans.put("position", ecranPosition);
        ecrans.put("retouche", ecranRetouche);
        ecrans.put("texte", ecranTexte);
        ecrans.put("impression", ecranImpression);

        // On affiche le premier écran
        afficherEcran("accueil");
    }

    /**
     * Initialise tous les écrans.
     */
    public void initialiser() {

        // On supprime tous les écrans
        ecranAccueil = null;
        ecranModele = null;
        ecranFond = null;
        ecranImport = null;
        ecranPosition = null;
        ecranRetouche = null;
        ecranTexte = null;
        ecranImpression = null;

        // On affiche le premier écran
        afficherEcran("accueil");
    }

    /**
     * Affiche un écran selon son identifiant d'écran.
     * Si l'identifiant est incorrect, aucune action et message dans la console.
     *
     * @param ecranId L'identifiant d'écran à afficher.
     */
    public void afficherEcran(String idEcran) {

        Ecran e = null;

        if( idEcran.equalsIgnoreCase("accueil") ) {
            e = new EcranAccueil(this);
            ecranFond = null;
            ecranImport = null;
            ecranPosition = null;
            ecranRetouche = null;
            ecranTexte = null;
            ecranImpression = null;
        } if( idEcran.equalsIgnoreCase("modele") ) {
            e = new EcranModele(this);
            ecranFond = null;
            ecranImport = null;
            ecranPosition = null;
            ecranRetouche = null;
            ecranTexte = null;
            ecranImpression = null;
        } if( idEcran.equalsIgnoreCase("fond") ) {
            e = new EcranFond(this);
            ecranImport = null;
            ecranPosition = null;
            ecranRetouche = null;
            ecranTexte = null;
            ecranImpression = null;
        } if( idEcran.equalsIgnoreCase("import") ) {
            e = new EcranImport(this);
            ecranPosition = null;
            ecranRetouche = null;
            ecranTexte = null;
            ecranImpression = null;
        } if( idEcran.equalsIgnoreCase("position") ) {
            e = new EcranPosition(this);
            ecranRetouche = null;
            ecranTexte = null;
            ecranImpression = null;
        } if( idEcran.equalsIgnoreCase("retouche") ) {
            e = new EcranRetouche(this);
            /* ici aucun : l'écran retouche est une sorte de popup */
        } if( idEcran.equalsIgnoreCase("texte") ) {
            e = new EcranTexte(this);
            ecranImpression = null;
        } if( idEcran.equalsIgnoreCase("impression") ) {
            e = new EcranImpression(this);
        }

        
        // Seulement si identifiant valide
        if( e != null ) {
            // On enregistre la référence vers l'écran
            ecrans.put(idEcran, e);

            // On affiche l'écran
            setContentPane(e);

            // On redemande un dessin
            validate();
        }

    }

    /**
     * Getter pour l'écran accueil
     * @return EcranAccueil, la référence vers l'écran
     */
    public EcranAccueil getEcranAccueil() {
        return (EcranAccueil)ecrans.get("accueil");
    }

    /**
     * Getter pour l'écran modèle
     * @return EcranModele, la référence vers l'écran
     */
    public EcranModele getEcranModele() {
        return (EcranModele)ecrans.get("modele");
    }

    /**
     * Getter pour l'écran fond
     * @return EcranFond, la référence vers l'écran
     */
    public EcranFond getEcranFond() {
        return (EcranFond)ecrans.get("fond");
    }

    /**
     * Getter pour l'écran import
     * @return EcranImport, la référence vers l'écran
     */
    public EcranImport getEcranImport() {
        return (EcranImport)ecrans.get("import");
    }

    /**
     * Getter pour l'écran Position
     * @return EcranPosition, la référence vers l'écran
     */
    public EcranPosition getEcranPosition() {
        return (EcranPosition)ecrans.get("position");
    }

    /**
     * Getter pour l'écran retouche
     * @return EcranRetouche, la référence vers l'écran
     */
    public EcranRetouche getEcranRetouche() {
        return (EcranRetouche)ecrans.get("retouche");
    }

    /**
     * Getter pour l'écran texte
     * @return EcranTexte, la référence vers l'écran
     */
    public EcranTexte getEcranTexte() {
        return (EcranTexte)ecrans.get("texte");
    }

    /**
     * Getter pour l'écran impression
     * @return EcranImpression, la référence vers l'écran
     */
    public EcranImpression getEcranImpression() {
        return (EcranImpression)ecrans.get("impression");
    }

    /**
     * Getter pour le controleur
     * @return Controleur, la référence vers le controleur
     */
    public Controleur getControleur() {
        return controleur;
    }

    /**
     * Getter pour les ressources
     * @return Ressources, la référence vers les ressources
     */
    public Ressources getRessources() {
        return ressources; 
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Creative Card");
        setBackground(new java.awt.Color(255, 255, 255));
        setBounds(new java.awt.Rectangle(0, 0, 1024, 768));
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setMinimumSize(new java.awt.Dimension(1024, 768));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 1024, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 768, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents


    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

}
